﻿namespace DoNet.TenPay
{
    public class NotifyV3Model
    {
        /// <summary>
        /// 通知的唯一ID
        /// </summary>
        public string id { set; get; }

        /// <summary>
        /// 通知创建时间,格式为YYYY-MM-DDTHH:mm:ss+TIMEZONE，YYYY-MM-DD表示年月日，T出现在字符串中，表示time元素的开头，HH:mm:ss.表示时分秒，TIMEZONE表示时区（+08:00表示东八区时间，领先UTC 8小时，即北京时间）。例如：2015-05-20T13:29:35+08:00表示北京时间2015年05月20日13点29分35秒。
        /// </summary>
        public string create_time { set; get; }

        /// <summary>
        /// 通知的类型，支付成功通知的类型为TRANSACTION.SUCCESS
        /// </summary>
        public string event_type { set; get; }

        /// <summary>
        /// 通知的资源数据类型，支付成功通知为encrypt-resource
        /// </summary>
        public string resource_type { set; get; }

        /// <summary>
        /// 通知数据 通知资源数据,json格式
        /// </summary>
        public ResourceModel resource { set; get; }

        /// <summary>
        /// 回调摘要
        /// </summary>
        public string summary { set; get; }
    }
    /// <summary>
    /// 微信支付回调通知结果resource实体
    /// </summary>
    public class ResourceModel
    {
        /// <summary>
        /// 对开启结果数据进行加密的加密算法，目前只支持AEAD_AES_256_GCM
        /// </summary>
        public string algorithm { set; get; }

        /// <summary>
        /// Base64编码后的开启/停用结果数据密文
        /// </summary>
        public string ciphertext { set; get; }

        /// <summary>
        /// 附加数据
        /// </summary>
        public string associated_data { set; get; }

        /// <summary>
        /// 原始回调类型，为transaction
        /// </summary>
        public string original_type { set; get; }

        /// <summary>
        /// 加密使用的随机串
        /// </summary>
        public string nonce { set; get; }
    }

    public interface IRefundBase
    {
        /// <summary>
        /// 微信支付退款单号
        /// </summary>
        string refund_id { get; set; }
        /// <summary>
        /// 商户退款单号
        /// </summary>
        string out_refund_no { get; set; }
        /// <summary>
        /// 微信支付订单号
        /// </summary>
        string transaction_id { get; set; }
        /// <summary>
        /// 商户订单号
        /// </summary>
        string out_trade_no { get; set; }
        /// <summary>
        /// 退款入账账户 取当前退款单的退款入账方，有以下几种情况：
        /// 1）退回银行卡：{银行名称}{卡类型}{卡尾号}
        /// 2）退回支付用户零钱:支付用户零钱
        /// 3）退还商户:商户基本账户商户结算银行账户
        /// 4）退回支付用户零钱通:支付用户零钱通 
        /// 示例值：招商银行信用卡0403
        /// </summary>
        string user_received_account { get; set; }
        /// <summary>
        /// 退款成功时间，当退款状态为退款成功时有返回。
        /// 示例值：2020-12-01T16:18:12+08:00
        /// </summary>
        string success_time { get; set; }
        /// <summary>
        /// 退款状态，枚举值：
        /// SUCCESS：退款成功
        /// CLOSE：退款关闭
        /// ABNORMAL：退款异常，退款到银行发现用户的卡作废或者冻结了，导致原路退款银行卡失败，可前往【服务商平台—>交易中心】，手动处理此笔退款
        /// </summary>
        string refund_status { get; set; }
        /// <summary>
        /// 金额信息
        /// </summary>
        amount_refund_base amount { get; set; }
    }
    public class RefundBase : IRefundBase
    {
        /// <summary>
        /// 微信支付退款单号
        /// </summary>
        public string refund_id { get; set; }
        /// <summary>
        /// 商户退款单号
        /// </summary>
        public string out_refund_no { get; set; }
        /// <summary>
        /// 微信支付订单号
        /// </summary>
        public string transaction_id { get; set; }
        /// <summary>
        /// 商户订单号
        /// </summary>
        public string out_trade_no { get; set; }
        /// <summary>
        /// 退款入账账户 取当前退款单的退款入账方，有以下几种情况：
        /// 1）退回银行卡：{银行名称}{卡类型}{卡尾号}
        /// 2）退回支付用户零钱:支付用户零钱
        /// 3）退还商户:商户基本账户商户结算银行账户
        /// 4）退回支付用户零钱通:支付用户零钱通 
        /// 示例值：招商银行信用卡0403
        /// </summary>
        public string user_received_account { get; set; }
        /// <summary>
        /// 退款成功时间，当退款状态为退款成功时有返回。
        /// 示例值：2020-12-01T16:18:12+08:00
        /// </summary>
        public string success_time { get; set; }
        /// <summary>
        /// 退款状态，枚举值：
        /// SUCCESS：退款成功
        /// CLOSE：退款关闭
        /// ABNORMAL：退款异常，退款到银行发现用户的卡作废或者冻结了，导致原路退款银行卡失败，可前往【服务商平台—>交易中心】，手动处理此笔退款
        /// </summary>
        public string refund_status { get; set; }
        /// <summary>
        /// 金额信息
        /// </summary>
        public amount_refund_base amount { get; set; }
    }
    /// <summary>
    /// 商户
    /// </summary>
    public class RefundV3Model : RefundBase
    {
        /// <summary>
        /// 直连商户号 直连商户的商户号，由微信支付生成并下发。 示例值：1230000109
        /// </summary>
        public string mchid { get; set; }
    }
    /// <summary>
    /// 服务商
    /// </summary>
    public class RefundV3ModelSp : RefundBase
    {
        /// <summary>
        /// 服务商户号
        /// </summary>
        public string sp_mchid { get; set; }
        /// <summary>
        /// 子商户号
        /// </summary>
        public string sub_mchid { get; set; }
    }
}
